using UnityEngine;

public static class RectIntExtensions
{
    // 定义一个委托类型 RectAction，用于传入一个 Vector3Int 类型的参数
    public delegate void RectAction(Vector3Int coords);

    // 定义一个委托类型 RectActionBool，用于传入一个 Vector3Int 类型的参数，并返回一个布尔值
    public delegate bool RectActionBool(Vector3Int coords);

    // 定义一个扩展方法 Iterate，用于在给定的 RectInt 区域上进行迭代，并执行指定的操作
    public static void Iterate(this RectInt rect, Vector3Int coords, RectAction action)
    {
        // 使用两个 for 循环来遍历 RectInt 区域的 x 和 y 坐标
        for (var x = rect.x; x < rect.xMax; x++)
        {
            for (var y = rect.y; y < rect.yMax; y++)
            {
                // 调用传入的委托 action，将当前的坐标作为参数传递进去
                action(coords + new Vector3Int(x, y, 0));
            }
        }
    }

    public static bool Iterate(this RectInt rect, Vector3Int coords, RectActionBool action)
    {
        for (var x = rect.x; x < rect.xMax; x++)
        {
            for (var y = rect.y; y < rect.yMax; y++)
            {
                if(action(coords + new Vector3Int(x, y, 0))){
                    return true;
                }
            }
        }
        return false;
    }

    public static void Iterate1(this RectInt rect, Vector3Int coords, RectAction action)
    {
        // 使用两个 for 循环来遍历 RectInt 区域的 x 和 y 坐标
        for (var x = rect.x; x < rect.xMax; x++)
        {
            for (var y = rect.y; y < rect.yMax; y++)
            {
                // 调用传入的委托 action，将当前的坐标作为参数传递进去
                action(coords + new Vector3Int(x, y, 0));
            }
        }
    }
}

